package br.com.cadastro.persistencia.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;

import br.com.cadastro.entidade.Atividade;
import br.com.cadastro.hibernate.util.HibernateUtil;

public class AtividadeDAO implements Serializable{

	private static final long serialVersionUID = 1L;
	private SessionFactory factory;

	public AtividadeDAO() {
		factory = HibernateUtil.getSessionFactory();
	}     

	public void inserir(Atividade atividade){
		Session session = factory.openSession();
		session.save(atividade);
		session.flush();
		session.close();
	}

	public void alterar(Atividade atividade){
		Session session = factory.openSession();
		session.update(atividade);
		session.flush();
		session.close();
	}
	public void excluir(Atividade atividade){
		Session session = factory.openSession();
		session.delete(atividade);
		session.flush();
		session.close();
	}

	@SuppressWarnings("unchecked")
	public List<Atividade> listarPorColuna(String coluna, boolean isAscendente){
		Session session = factory.openSession();
		session.beginTransaction();
		Order order = null;
		if(isAscendente){
			order = Order.asc(coluna);
		}else{
			order = Order.desc(coluna);
		}
		List<Atividade>result = session.createCriteria(Atividade.class)
		.addOrder(order).list();
		session.getTransaction().commit();
		session.close();

		return result;
	}

	public void salvarOuAlterar(Atividade atividade) {
		Session session = factory.openSession();
		session.saveOrUpdate(atividade);
		session.flush();
		session.close();
	}

	@SuppressWarnings("unchecked")
	public List<Atividade> listarTodos(){
		Session session = factory.openSession();
		session.beginTransaction();
		List<Atividade> result = session.createQuery("from Atividade").list();
		session.getTransaction().commit();
		return result;
	}
}